package com.vegetable.modules.service.stock;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vegetable.common.utils.PageUtils;
import com.vegetable.modules.entity.stock.StockAlertRecord;
import com.vegetable.modules.entity.stock.po.StockAlertRecordQueryPO;

import java.util.List;

/**
 * <p>
 * 库存预警记录表 服务类
 * </p>
 *
 * @author wangruijie
 * @since 2024-09-09
 */
public interface IStockAlertRecordService extends IService<StockAlertRecord> {

    /**
     * 分页查询库存预警记录
     * @param po 查询条件
     * @return 分页结果
     */
    PageUtils queryPage(StockAlertRecordQueryPO po);

    /**
     * 创建预警记录
     * @param alertId 预警设置ID
     * @param commodityId 商品ID
     * @param specsId 规格ID
     * @param currentQuantity 当前库存数量
     * @param alertQuantity 预警阈值
     * @param alertLevel 预警级别
     * @return 预警记录
     */
    StockAlertRecord createAlertRecord(Long alertId, Long commodityId, Long specsId, 
                                     Integer currentQuantity, Integer alertQuantity, Integer alertLevel);

    /**
     * 处理预警记录
     * @param recordId 记录ID
     * @param handleUserId 处理人ID
     * @param handleRemark 处理备注
     * @param alertStatus 预警状态：1已处理2已忽略
     * @return 操作结果
     */
    boolean handleAlertRecord(Long recordId, Long handleUserId, String handleRemark, Integer alertStatus);

    /**
     * 批量处理预警记录
     * @param recordIds 记录ID列表
     * @param handleUserId 处理人ID
     * @param handleRemark 处理备注
     * @param alertStatus 预警状态：1已处理2已忽略
     * @return 操作结果
     */
    boolean batchHandleAlertRecord(List<Long> recordIds, Long handleUserId, String handleRemark, Integer alertStatus);

    /**
     * 查询未处理的预警记录数量
     * @return 未处理数量
     */
    Long countUnhandledRecords();

    /**
     * 查询最新的预警记录
     * @param commodityId 商品ID
     * @param specsId 规格ID
     * @return 最新预警记录
     */
    StockAlertRecord getLatestAlertRecord(Long commodityId, Long specsId);
}